package com.tmxk.api.days03.wmh;

import java.rmi.registry.Registry;
import java.util.*;
/**
 * 2.1. boolean equals(Object anObject)比较值字符串的内容。
 * 2.2 length()获取字符串长度
 * 2.3 boolean isEmpty()  字符串长度是否为0;
 * 2.4 char charAt(in index)  根据字符串指定下标位置返回对应单个字符。
 * char和String区别：String就是由多个字符（char)组成。
 * 2.5 byte[] getByte() 将字符串转换成字节数组（将字符串内容跟File文件交互对应）
 * 2.6  boolean equalsIgnore(String anotherString)  忽略大小写比较字符串的内容。
 * 2.7  int compareTo(String    anothorString)  字符串比较值大小（按字典顺序比较两个字符串）
 * 如：a.compareTo(b);a字符串大于b字符串 ,返回负数；a字符串等于b字符串，返回0；a字符串小于b字符串，返回正数
 * 2.8  int compareToIgnoreCase(String, str):忽略大小写字符串比较值大小（按字典顺序比较两个字符串）；比较的结果用2.7
 * 2.9 int indexof(Object ch)  返回指定字符第一次出现的字符串内的索引
 * 2.10 int LastIndexOf(Object ch)  返回指定字符的最后一次出现的字符串中的索引。
 * 2.11 String substring(int beginIndex) 根据指定下标位置截取字符串，该方法代表从指定开始位置截取到最后。
 * 2.12 String substring(int beginIndex,int endIndex) 根据指定开始下标位置和结束下标位置截取字符串
 * <p>
 * 注：2.11和2.12截取字符串下标的位置遵循取前不取后。
 * 2.13.String concat(String str) 字符串正则匹配。
 * 2.14.String replace(char, oldChar,char newChar)  字符串根据指定字符进行替换。
 * 2.15. boolean matches(String regex) 字符串正则匹配
 * 2.16. String[] split(String regex)   分割字符串
 * 2.17. String toLowerCase()  将字符串转换成小写
 * 2.18. String toUppperCase() 将字符串转换成大写
 * 2.19 String trim() 去空格
 * 2.20 String format(String format,Object.....args) 字符串格式化指定内容
 * 2.21 String valueof(Object obj)  将指定参数转换成字符串。
 * 2.22. String intern() 一个字符串与该字符串具有相同的内容，保证来自一个唯一的字符串池。
 **/

/**
 * 需求 : 登录 / 注册
 * 用户名
 * 密码
 **/

public class StringRegisterDemo {
    static Scanner sc = new Scanner(System.in);
    protected static Map<String, User> userMap = new HashMap<>();

    static {
        User user1 = new User("1001", "Tom", "123456");
        User user2 = new User("1001", "Tom", "123456");
        userMap.put(user1.getUserId(), user1);
        userMap.put(user2.getUserId(), user2);
    }

    String phone;
    String email;
    String pwd;
    String um;

    // 将登录信息存储到map中
    public void userLogin() {
        //登录：用户名，密码
        System.out.println("欢迎使用xx平台,请先登录");
        System.out.print("请输入用户名:");
        String userName = sc.next();
        System.out.print("请输入密码:");
        String password = sc.next();
        // 判断当前用户输入的 用户名和密码是否存在平台系统中
        Collection<User> users = userMap.values();
        boolean isBool = false;
        for (User u : users) {
            if (userName.equalsIgnoreCase(u.getUserName()) && password.equals(u.getPassword())) {
                isBool = true;
                break;
            }
        }
        if (isBool) {
            System.out.println("登录成功,欢迎" + userName + "登录");
            String mes = "登录成功,欢迎".concat(userName).concat("登录");
            System.out.println("mes:" + mes);
        } else {
            System.out.println("登录失败,密码或用户名有误");
        }
    }


    //将注册信息存储到map中。
    public void userRegister() {
        System.out.println("************用户注册************");
        System.out.print("请输入用户名:");
        um = sc.next();
        System.out.print("请输入密码:");
        pwd = sc.next();
        //校验密码长度
        if (pwd.length() < 6) {
            System.out.println("注册用户密码不能少于6位，请重新输入用户密码：");
            pwd = sc.next();
        }
        System.out.println("请再次确认密码");
        String confirmePwd = sc.next();
        while (!confirmePwd.equals(pwd)) {
            System.out.print("两次密码不一致，请重新输入确认密码：");
            confirmePwd = sc.next();
        }
        System.out.println("请输入手机号：");
        String phone = sc.next();
        /**while (phone.length() != 11){
         System.out.println("手机号必须是1位的，请重新输入：");
         phone = sc.next();
         }
         **/
        //定义手机号正则匹配
        String phoneReg = "1(38|88|33)\\d{8}";  //^取反   或1[0-9]{10}
        System.out.println(phone.matches(phoneReg));
        while (!phone.matches(phoneReg)) {
            System.out.println("手机号必须是11位且由38,33,88开头的，请重新输入：");
            phone = sc.next();
        }
        System.out.println("请输入邮箱：");
        email = sc.next();
        while (email.indexOf("@") == -1 && email.indexOf(".") == -1) {
            System.out.println("邮箱必须包含@和.   ，请重新输入");
            email = sc.next();
        }
        System.out.println("请输入身份证号码：");
        String certificateNo = sc.next();
        String certificateNoReg = "([1-9][0-9]{17}|[0-9][1-9]{16}X)";
        System.out.println(certificateNo.matches(certificateNoReg));
        while (!certificateNo.matches(certificateNoReg)) {
            System.out.println("身份证输入不合法，请重新输入！");
            certificateNo = sc.next();
        }
        System.out.println("用户注册成功");

        //将注册成功的用户信息添加到集合中。
        // 将注册成功的用户信息添加到集合中
        User register = new User();
        // UUID 国际通用标识符号
        UUID uuid = UUID.randomUUID();
        register.setUserId(uuid.toString().replace("-", ""));
        String registerName;
        register.setUserName(um);
        register.setPassword(pwd);
        register.setPhone(phone);
        register.setEmail(email);
        register.setCertifecate(certificateNo);
    }

    //用户信息
    public void initUser() {
        System.out.println("用户名\t用户密码\t手机号\t邮箱\t身份证号\t用户id\t\t");
        for (User u : userMap.values()) {
            System.out.println(u.getUserName() + "\t\t" + u.getPassword() + "\t\t " + u.getPhone() + "\t\t" + u.getEmail() + "\t\t" + u.getCertifecate() + "\t\t" + u.getUserId());
        }
    }

    public static void main(String[] args) {
        StringRegisterDemo registerDemo = new StringRegisterDemo();
        System.out.println("欢迎使用平台");
        int chose = 0;
        do {
            //调用系统平台中成员信息的变量
            registerDemo.initUser();
            System.out.println(">>>>>>>>>>>>>>>>>>>");
            try {
                System.out.println("\n 请选择  1.登录    2.注册");
                chose = sc.nextInt();
                switch (chose) {
                    case 1:
                        registerDemo.userLogin();
                    case 2:
                        registerDemo.userRegister();
                        break;
                }
            } catch (Exception e) {
                e.printStackTrace();
            } finally {
                System.out.println("程序执行完毕！");
            }
        } while (chose == 1 || chose == 2);
    }
}